扩展支持
对于 VS Code 之类的 IDE 是如何支撑应用市场几百万的扩展各自的定制要求的呢? 答案是扩展点。扩展点是什么,以及有哪些扩展形式?
1. 扩展配置文件中的扩展点
对于 VS Code 扩展来说,扩展点是通过 package.json 中的 contributes 字段来定义的。例如:
{
"contributes": {
"commands": [
{
"command": "extension.sayHello",
"title": "Hello World"
}
],
"menus": {
"editor/context": [
{
"command": "extension.sayHello",
"group": "navigation"
}
]
}
}
}
其中有很多可扩展的功能,都可以在 contributes 中找到对应的扩展点。例如:
- menus.
- command.
- languages.
- views.
- viewContainers.
- ...
其中类似 menus 之类的扩展点,配置更加灵活,开发者可以通过在配置项中传入 when 条件语句,VS Code 会自动执行 when 句子,根据执行结构来决定是否渲染对应的 menus 来达到灵活的控制目的。when 条件句子,是 VS Code 使用最广泛、最强大的扩展能力,众多在线的编辑器例如腾讯文档、钉钉文档的工具栏,都参考了他们的实现。
2. 扩展 API
在扩展中通过 import vscode from 'vscode' 的形式调用 vscode 底层透出给扩展使用的能力。例如:
vscode.window.showInformationMessage("Hello World!");
vscode.openWith(vscode.Uri.file("path/to/file"), "vscode.diff");